package com.hp.gxw.u8.xml;

import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.hp.gxw.u8.dto.Rdrecord11Parameter;
import com.hp.gxw.u8.dto.Rdrecords11Parameter;
import com.hp.gxw.utils.DateUtil;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.springframework.stereotype.Component;

@Component
public class Rdrecord11Xml {

	public static String createXML(Rdrecord11Parameter rdrecord11Parameter) throws Exception{
		try {
			// 1、创建document对象
			Document document = DocumentHelper.createDocument();
			// 2、创建根节点rss
			Element ufinterface = document.addElement("ufinterface");
			ufinterface.addNamespace("z", "http://www.w3.org/2001/XMLSchema");
			// 向ufinterface节点添加efserverid属性(U8账套)
			ufinterface.addAttribute("efserverid", rdrecord11Parameter.getEfserverid());
			// 向ufinterface节点添加eftype属性(方法：0412 材料出库单)
			ufinterface.addAttribute("eftype", rdrecord11Parameter.getEftype());
			// 向ufinterface节点添加proc属性(增删改查事件 add)
			ufinterface.addAttribute("proc", rdrecord11Parameter.getProc());
			// 向ufinterface节点添加efdebug属性
			ufinterface.addAttribute("efdebug", "1");
			// 向ufinterface节点添加actions属性,入库后自动审核
			ufinterface.addAttribute("actions", "verify");
			ufinterface.addAttribute("ddate", DateUtil.getDateFormat(rdrecord11Parameter.getDdate()));
			// 4、生成子节点及子节点内容
			Element voucher = ufinterface.addElement("voucher");
			voucher.addAttribute("cardnumber", rdrecord11Parameter.getEftype());
			voucher.addAttribute("ccardname", "");
			voucher.addNamespace("z", "EF");
			Element head = voucher.addElement("head");
			Element headRow = head.addElement("z:row");
			/**以下开始构建xml参数，说明括号里面是固定值，没有的为传入变量*/
			if(StringUtils.isNotEmpty(rdrecord11Parameter.getCcode())) {
				headRow.addAttribute("ccode", rdrecord11Parameter.getCcode());// 出库单号（0000000001）
			}
			if(StringUtils.isNotEmpty(rdrecord11Parameter.getBrdflag())) {
				headRow.addAttribute("brdflag", rdrecord11Parameter.getBrdflag());// 收发标志（0）
			}
			if(StringUtils.isNotEmpty(rdrecord11Parameter.getCvouchtype())) {
				headRow.addAttribute("cvouchtype", rdrecord11Parameter.getCvouchtype());// 单据类型（11）
			}
			if(StringUtils.isNotEmpty(rdrecord11Parameter.getCrdcode())) {
				headRow.addAttribute("crdcode", rdrecord11Parameter.getCrdcode());//传入参数：出库类别
			}
			if(StringUtils.isNotEmpty(rdrecord11Parameter.getCwhcode())) {
				headRow.addAttribute("cwhcode", rdrecord11Parameter.getCwhcode());// 传入参数：仓库
			}
			if(StringUtils.isNotEmpty(rdrecord11Parameter.getCsource())) {
				headRow.addAttribute("csource", rdrecord11Parameter.getCsource());// 单据来源（生产订单）
			}
			if(StringUtils.isNotEmpty(rdrecord11Parameter.getCbustype())) {
				headRow.addAttribute("cbustype", rdrecord11Parameter.getCbustype());//业务类型（领料）
			}
			if(StringUtils.isNotEmpty(rdrecord11Parameter.getCdepcode())) {
				headRow.addAttribute("cdepcode", rdrecord11Parameter.getCdepcode());//传入参数：部门编码
			}
			if(StringUtils.isNotEmpty(rdrecord11Parameter.getCmaker())) {
				headRow.addAttribute("cmaker", rdrecord11Parameter.getCmaker());// 传入参数：制单人
			}
			if(rdrecord11Parameter.getDdate() != null) {
				headRow.addAttribute("ddate", DateUtil.getDateFormat(rdrecord11Parameter.getDdate()));// 传入参数：出库日期
			}
			if(rdrecord11Parameter.getDnmaketime() != null) {
				headRow.addAttribute("dnmaketime", DateUtil.getDateTimeFormat(rdrecord11Parameter.getDnmaketime()));// 传入参数：制单时间
			}
			if(StringUtils.isNotEmpty(rdrecord11Parameter.getChandler())) {
				headRow.addAttribute("chandler", rdrecord11Parameter.getChandler());// 传入参数：制单人
			}
			if(rdrecord11Parameter.getDveridate() != null) {
				headRow.addAttribute("dveridate", DateUtil.getDateFormat(rdrecord11Parameter.getDveridate()));// 传入参数：出库日期
			}
			if(rdrecord11Parameter.getDnverifytime() != null) {
				headRow.addAttribute("dnverifytime", DateUtil.getDateTimeFormat(rdrecord11Parameter.getDnverifytime()));// 传入参数：制单时间
			}
			headRow.addAttribute("vt_id", "65");// 传入参数：单据模板号
			Element body = voucher.addElement("body");
			int rowno = 1;
			for (Rdrecords11Parameter rdrecords11Parameter : rdrecord11Parameter.getDetailsList()) {
				Element bodyRow = body.addElement("z:row");
				if(StringUtils.isNotEmpty(rdrecords11Parameter.getCinvcode())){
					bodyRow.addAttribute("cinvcode", rdrecords11Parameter.getCinvcode());// 传入参数：存货编码
				}
				if(StringUtils.isNotEmpty(rdrecords11Parameter.getCbatch())){
					bodyRow.addAttribute("cbatch", rdrecords11Parameter.getCbatch());// 传入参数：批次号
				}
				if(rdrecords11Parameter.getIquantity() != null){
					bodyRow.addAttribute("iquantity", rdrecords11Parameter.getIquantity().toString());// 传入参数：数量
				}
				if(rdrecords11Parameter.getIunitcost() != null){
					bodyRow.addAttribute("iunitcost", rdrecords11Parameter.getIunitcost().toString());// 传入参数：数量
				}
				if(rdrecords11Parameter.getIprice() != null){
					bodyRow.addAttribute("iprice", rdrecords11Parameter.getIprice().toString());// 传入参数：数量
				}
				if(StringUtils.isNotEmpty(rdrecords11Parameter.getImpoids())){
					bodyRow.addAttribute("impoids", rdrecords11Parameter.getImpoids());// 传入参数：根据mom_order表中的moid，找到mom_orderdetail的modid，再根据modid找到mom_moallocate的allocateid,然后传入
				}
				if(StringUtils.isNotEmpty(rdrecords11Parameter.getImoseq())){
					bodyRow.addAttribute("imoseq", rdrecords11Parameter.getImoseq());// 传入参数：生产订单行号来源于mom_orderdetail
				}
				if(StringUtils.isNotEmpty(rdrecords11Parameter.getInvcode())){
					bodyRow.addAttribute("invcode", rdrecords11Parameter.getInvcode());//传入参数：生产订单指定生产的成品编码 来源于mom_orderdetail
				}
				bodyRow.addAttribute("irowno", String.valueOf(rowno));// 行号
				rowno++;
			}

			OutputFormat format = OutputFormat.createPrettyPrint();
			// 设置编码格式
			format.setEncoding("UTF-8");
			return document.asXML();
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}
	
}
